package api

import (
	"fmt"
	"init-database/global"
	"net/http"

	"github.com/gin-gonic/gin"

	"init-database/model"
)

// DBApi 数据库初始化相关的API处理结构体
type DBApi struct{}

// InitDB 初始化数据库的API处理方法
// @Summary 初始化数据库
// @Description 根据提供的数据库配置信息创建并初始化数据库
// @Accept json
// @Produce json
// @Param dbInfo body model.InitDB true "数据库配置信息"
// @Success 200 {object} gin.H "成功创建数据库"
// @Failure 400 {object} gin.H "参数校验失败"
// @Failure 500 {object} gin.H "数据库创建失败"
// @Router /init/db [post]
func (i *DBApi) InitDB(c *gin.Context) {
	if global.GLOBAL_DB != nil {
		c.JSON(http.StatusConflict, gin.H{
			"code":    409,
			"message": "已存在数据库配置",
		})
		return
	}

	var dbInfo model.InitDB
	if err := c.ShouldBindJSON(&dbInfo); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{
			"code":    400,
			"message": "参数校验不通过",
		})
		return
	}

	if err := initDBService.InitDB(dbInfo); err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{
			"code":    500,
			"message": fmt.Sprintf("数据库创建失败：%s", err),
		})
		return
	}

	c.JSON(http.StatusOK, gin.H{
		"code":    200,
		"message": "自动创建数据库成功",
	})
}
